// 监听来自popup的消息
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === "modifyFields") {
    try {
      modifyFields();
      sendResponse({success: true});
    } catch (error) {
      sendResponse({success: false, error: error.message});
    }
  }
});

// 修改字段值的函数
function modifyFields() {
  // 查找页面上的所有输入框元素
  const inputElements = document.querySelectorAll('input');
  
  // 遍历所有输入框
  inputElements.forEach(input => {
    // 获取输入框关联的标签文本
    const label = getLabelForInput(input);
    
    // 检查是否是需要修改的字段
    if (label && ['管理单位', '用户编号', '用户名称', '用电类别', '用户地址'].includes(label)) {
      // 修改输入框的值
      setInputValue(input, '烦烦烦');
    }
  });
  
  // 查找页面上的表格并修改其中的内容
  const tables = document.querySelectorAll('table');
  
  // 遍历所有表格
  tables.forEach(table => {
    // 查找表头包含指定字段的表格
    const headers = Array.from(table.querySelectorAll('th'));
    const headerTexts = headers.map(header => header.textContent.trim());
    
    // 检查是否包含我们需要的字段
    const hasRequiredFields = 
      headerTexts.includes('管理单位') || 
      headerTexts.includes('用户编号') || 
      headerTexts.includes('用户名称') || 
      headerTexts.includes('用电类别') || 
      headerTexts.includes('用户地址');
    
    if (hasRequiredFields) {
      // 获取所有数据行
      const rows = table.querySelectorAll('tbody tr');
      
      rows.forEach(row => {
        const cells = row.querySelectorAll('td');
        headers.forEach((header, index) => {
          const headerText = header.textContent.trim();
          
          // 检查是否是需要修改的字段
          if (['管理单位', '用户编号', '用户名称', '用电类别', '用户地址'].includes(headerText)) {
            if (cells[index]) {
              // 修改单元格内容为"烦烦烦"
              cells[index].textContent = '烦烦烦';
            }
          }
        });
      });
    }
  });
}

// 获取输入框关联的标签文本
function getLabelForInput(input) {
  // 方法1: 通过id关联查找label
  const inputId = input.id;
  if (inputId) {
    const label = document.querySelector(`label[for="${inputId}"]`);
    if (label) {
      return label.textContent.trim().replace('*', '').trim(); // 去除可能的星号标记
    }
  }
  
  // 方法2: 查找最近的包含文本的元素
  let parent = input.parentElement;
  while (parent) {
    const label = parent.querySelector('label');
    if (label) {
      return label.textContent.trim().replace('*', '').trim();
    }
    
    // 查找包含文本的其他元素
    for (let i = 0; i < parent.children.length; i++) {
      const child = parent.children[i];
      if (child !== input && child.textContent && child.textContent.trim()) {
        // 简单判断是否可能是标签文本
        const text = child.textContent.trim().replace('*', '').trim();
        if (text.length > 0 && text.length < 10) { // 假设标签文本不会太长
          return text;
        }
      }
    }
    
    parent = parent.parentElement;
  }
  
  return null;
}

// 设置输入框的值并触发Vue更新
function setInputValue(input, value) {
  // 设置value属性
  input.value = value;
  
  // 触发Vue的更新机制
  // 方法1: 触发input事件
  const inputEvent = new Event('input', { bubbles: true });
  input.dispatchEvent(inputEvent);
  
  // 方法2: 触发change事件
  const changeEvent = new Event('change', { bubbles: true });
  input.dispatchEvent(changeEvent);
  
  // 方法3: 手动触发Vue的更新 (适用于Vue 2和Vue 3)
  // Vue 2
  if (input.__vue__) {
    input.__vue__.$emit('input', value);
  }
  
  // Vue 3
  if (input._vnode && input._vnode.props) {
    if (typeof input._vnode.props.onInput === 'function') {
      input._vnode.props.onInput({ target: { value } });
    }
  }
  
  // 方法4: 使用Object.getOwnPropertyDescriptor检测Vue绑定的setter
  const prototype = Object.getPrototypeOf(input);
  const valueDescriptor = Object.getOwnPropertyDescriptor(prototype, 'value');
  if (valueDescriptor && valueDescriptor.set) {
    valueDescriptor.set.call(input, value);
  }
}